import cv2
import numpy as np
import glob

# 获取所有PNG文件路径并按文件名排序
file_list = glob.glob('./split/*.png')
file_list.sort()  # 按文件名排序

# 检查是否找到图片
if not file_list:
    print("错误：未找到任何PNG文件")
    exit()

# 初始化叠加结果（全透明背景）
result = None

# 遍历所有图片并叠加
for file_path in file_list:
    # 读取图片（保留Alpha通道）
    img = cv2.imread(file_path, cv2.IMREAD_UNCHANGED)
    
    # 如果图片是3通道（无Alpha），添加Alpha通道
    if img.shape[2] == 3:
        img = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
    
    # 初始化叠加结果（使用第一张图片的尺寸）
    if result is None:
        result = np.zeros_like(img, dtype=np.float32)
    
    # 转换为浮点数以便计算
    img_float = img.astype(np.float32) / 255.0
    
    # 提取Alpha通道并归一化
    alpha = img_float[:, :, 3]
    alpha = np.expand_dims(alpha, axis=2)
    
    # 图层叠加公式：result = new_alpha * img + (1 - new_alpha) * result
    result[:, :, :3] = alpha * img_float[:, :, :3] + (1 - alpha) * result[:, :, :3]
    result[:, :, 3] = alpha.squeeze() + result[:, :, 3] * (1 - alpha.squeeze())

# 转换回8位整数（0-255范围）
result = (result * 255).clip(0, 255).astype(np.uint8)

# 保存结果
cv2.imwrite('./ret.png', result)
print("图片已保存为 ./ret.png")